FISCO BCOS 3.0 Pro版三节点分布式部署实战

  • ~2.68K 字

本篇博客文档详细记录了基于FISCO BCOS 3.8.0 Pro版本的三节点分布式联盟链部署全过程,重点剖析了Tars服务配置异常、节点加密不一致导致共识失败、局域网外无法通信等核心问题的排查与解决方案。

📋 部署环境与前期准备

部署环境拓扑图

硬件与系统环境

  • 节点数量:3台独立物理机
  • 节点IP:10.8.0.2(生产节点)、10.8.0.3(仓储节点)、10.8.0.4(检测节点)
  • 操作系统:Ubutnu 20.04 LTS x86_64
  • 硬件配置:4核8G内存、50G SSD存储
  • 网络环境:初始为局域网环境,后续通过WireGuard实现跨地域组网

核心依赖软件

  • FISCO BCOS版本:v3.8.0 Pro
  • 部署工具:BcosBuilder v3.8.0
  • 微服务框架:Tars v2.4.10

🛠️ BcosBuilder工具下载与初始化

下载官方部署工具

1
2
3
4
5
6
7
8
9
# 挑选主要内容阐述

# 克隆BcosBuilder仓库
git clone https://github.com/FISCO-BCOS/BcosBuilder.git
# 切换到对应版本分支
git checkout v3.8.0

# 编辑配置文件,设置节点信息
vim config-deploy.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
#toml配置文件
[chain]
chain_id=1
sm_crypto=true # 启用国密算法

[group]
group_id=1
nodes=["10.8.0.2", "10.8.0.3", "10.8.0.4"]

[tars]
tars_enable=true
tars_web_host="10.8.0.2"
tars_web_port=3000

⚠️ Tars服务配置问题排查与修复

问题现象

执行bash deploy.sh tars命令时,出现以下错误:

1
Error: /usr/local/tars/cpp/bin/tarsnode is not a directory

问题根源

官方文档中描述/tars/cpp/bin/tarsnode为文件夹路径,但实际安装后该路径是一个二进制可执行文件,导致脚本中的目录检查逻辑失败。

解决方案

修改BcosBuilder脚本文件,移除错误的目录检查:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 编辑tars部署脚本
vim /usr/local/tars/scripts/deploy_tars.sh

# 找到以下代码段
if [ ! -d "$TARS_NODE_BIN" ]; then
echo "Error: $TARS_NODE_BIN is not a directory"
exit 1
fi

# 修改为:跳过目录检查,直接验证文件是否存在
if [ ! -f "$TARS_NODE_BIN" ]; then
echo "Error: $TARS_NODE_BIN does not exist"
exit 1
fi

🚀 节点配置生成与分布式部署

生成节点配置文件

1
2
3
4
5
6
# 生成所有节点的配置
bash deploy.sh genconfig

# 查看生成的配置文件
ls -l output/
# 输出:10.8.0.2/ 10.8.0.3/ 10.8.0.4/ cert/ config.ini

分发配置到各节点

1
2
3
4
5
# 分发到10.8.0.3节点
scp -r output/10.8.0.3/* user@10.8.0.3:~/fisco/

# 分发到10.8.0.4节点
scp -r output/10.8.0.4/* user@10.8.0.4:~/fisco/

某节点启动界面

🔒 节点加密不一致导致共识失败问题解决

问题现象

所有节点启动成功,但无法形成共识,节点日志中出现以下错误:

1
2
Handshake failed: encryption mode mismatch
Peer node uses encrypted communication, local node uses plaintext

问题根源

在配置文件分发过程中,部分节点的config.ini文件中sm_crypto参数默认采用不加密,导致节点间国密模式不一致,三次握手协议失败。

解决方案

统一所有节点的加密配置:

1
2
3
4
5
6
7
8
9
10
11
# 在每个节点上编辑config.ini
vim ~/fisco/config.ini

# 确保以下配置项完全一致
[network]
sm_crypto=true
ssl_cert_path=./cert/
ssl_key_path=./cert/

[consensus]
consensus_type=pbft

重启所有节点服务

1
2
3
# 在每个节点上执行
bash stop.sh
bash start.sh

🖥️ 控制台连接与节点状态验证

下载并启动控制台

1
2
3
4
5
6
7
8
9
# 在任意节点上下载控制台
cd ~/fisco
bash <(curl -s https://raw.githubusercontent.com/FISCO-BCOS/console/master/tools/download_console.sh)

# 复制节点证书到控制台目录
cp -r nodes/10.8.0.2/sdk/* console/conf/

# 启动控制台
cd ~/fisco/console && bash start.sh

验证节点状态

1
2
3
4
5
6
7
8
# 查看节点列表
[group:0]> getNodeList

# 查看节点共识状态
[group:0]> getConsensusStatus

# 查看区块高度
[group:0]> getBlockNumber

正常输出应显示3个节点均处于运行状态,且区块高度一致。

WeBASE平台节点监控与区块状态

🌐 跨地域通信问题与WireGuard解决方案

问题现象

在局域网环境下节点通信正常,但当节点部署在不同地域的网络中时,无法建立P2P连接,数据无法上链。

问题根源

不同地域的节点位于NAT网络之后,没有公网IP,无法直接进行P2P通信。

解决方案

采用WireGuard虚拟局域网技术,为所有节点分配统一的虚拟IP地址,实现跨地域的安全加密通信。

WireGuard跨地域组网架构图

💖 感谢支持,点击查看收款码
你的鼓励是我持续更新的动力!
分享
扫码查看github网址,按钮查看个人网站